// axios

import axios from 'axios'
import { Toast } from 'vant'
import { getToken, delToken } from './storage.js'

import router from '@/router/index'
// import { message } from 'koa/lib/response'

const request = axios.create({
  // 接口地址 :  根地址(域名) + 路由
  baseURL: 'https://apifoxmock.com/m1/4837988-0-default',
  timeout: 10000
})

// 拦截器

// 请求拦截器   发出去之前 要做的事儿
request.interceptors.request.use((config) => {
  console.log('请求拦截器.......')
  const token = getToken()

  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }

  // 统一携带token
  // Authorization     Bearer token
  // 没有异常的时候
  return config
}, (error) => {
  // 请求出现了异常  异步
  return Promise.reject(error)
})

// 响应拦截器   后端给你响应了 , 这里先接收到 , 做要做的处理, 再放行到具体页面
request.interceptors.response.use((response) => {
  // 先解析一下数据 的公共层
  // [{data:[],[],[]}]
  // return response[0] // data
  console.log('response.status', response.status)

  return response.data
}, (error) => {
  // 401 状态码   to'ken无效  重新登录
  error.response.status = 401
  if (error.response.status === 401) {
    // 本地 token可以删了  重新登录
    delToken()
    // this 存在于 func的 {} 里面 , 代表当前的自己
    // var app = new Vue({  this  })
    error.response = { data: { message: '当前token已失效,请重新登录' } }
    Toast.fail(error.response.data.message)
    router.push('/login')
  } else {
    // error 信息提取出来 , 由响应拦截起统一处理异常
    // if (error.response) {
    error.response = { data: { message: '后端给出的理由' } }
    Toast.fail(error.response.data.message)
  }

  // 请求出现了异常  异步
  return Promise.reject(error)
})

export default request
